import java.util.HashMap;

/**
 * Piece est la classe représentant une pièce
 * @author smathomeutbm
 * @version 1.0
 */
public class Piece {
	
    private HashMap<String,Objet> listObjet;
    private HashMap<String,Capteur> listCapteur;
    private String nomPiece;
	private float temperaturePiece;
	private float temperatureVoulu;
	private boolean presence;
	private boolean lumiere;
	private int coordHG;
	private int coordBD;
	private int id;
	 
	/**
     * Constructeur par défaut de Piece
     */
	public Piece() {
		id = 0;
	    nomPiece = "";
		temperaturePiece = 0;
		temperatureVoulu = 0;
		presence = false;
		lumiere = false;
		coordHG = 0;
		coordBD = 0;
		listObjet = new HashMap<String, Objet>();
		listCapteur = new HashMap<String, Capteur>();
	}
	
	/**
     * Constructeur de base avec tous les paramètres
     * @param nomPiece Nom de la pièce
     * @param id Identifiant de la pièce
     * @param temperaturePiece Température dans la pièce
     * @param temperatureVoulu Température voulu dans la pièce
     * @param presence Présence d'une personne dans la pièce
     * @param lumiere Luminosité dans la pièce
     * @param coordHG Coordonnées haut/gauche
     * @param coordBD Coordonnées bas/droit
     * @param listObjet Liste des objets de la pièce
     * @param listCapteur Liste des capteurs de la pièce
     */	
	public Piece(String nomPiece, int id, float temperaturePiece, float temperatureVoulu,
			boolean presence, boolean lumiere, int coordHG, int coordBD, HashMap<String,Objet> listObjet, HashMap<String,Capteur> listCapteur) {
		this.id = id;
	    this.nomPiece = nomPiece;
		this.temperaturePiece = temperaturePiece;
		this.temperatureVoulu = temperatureVoulu;
		this.presence = presence;
		this.lumiere = lumiere;
		this.coordHG = coordHG;
		this.coordBD = coordBD;
		this.listObjet = listObjet;
		this.listCapteur = listCapteur;
	}
	
	/**
     * Constructeur de base avec les paramètres sans les listes
     * @param nomPiece Nom de la pièce
     * @param id Identifiant de la pièce
     * @param temperaturePiece Température dans la pièce
     * @param temperatureVoulu Température voulu dans la pièce
     * @param presence Présence d'une personne dans la pièce
     * @param lumiere Luminosité dans la pièce
     * @param coordHG Coordonnées haut/gauche
     * @param coordBD Coordonnées bas/droit
     */	
	public Piece(String nomPiece, int id, float temperaturePiece, float temperatureVoulu,
			boolean presence, boolean lumiere, int coordHG, int coordBD) {
		this(nomPiece, id, temperaturePiece, temperatureVoulu, presence, lumiere, coordHG, coordBD, new HashMap<String, Objet>(), new HashMap<String, Capteur>());
	}
	
	
	/**
     * Récupérer un objet dans la pièce
     * @param name Nom de l'objet à retourner
     * @return Objet correspondant
     */
	public Objet getObjet(String name) {
	    return listObjet.get(name);
	}
	
	/**
     * Ajouter un objet à la pièce
     * @param objet Objet
     */
	public void putObjet(Objet objet) {
	    listObjet.put(objet.getNomObjet(),objet);
	}
	
	/**
     * Ajouter un capteur à la pièce
     * @param capteur Capteur
     */
	public void addCapteur(Capteur capteur) {
	    listCapteur.put(capteur.getNomCapteur(),capteur);
	}
	
	/**
     * Récupérer le nom de la pièce
     * @return Le nom de la pièce
     */
	public String getNomPiece() {
	    return nomPiece;
	}
	
	/**
     * Récupérer l'identifiant de la pièce
     * @return L'identifiant de la pièce
     */
	public int getId() {
	    return id;
	}
	
	/**
     * Récupérer la présence dans la pièce
     * @return Présence de la pièce
     */
	public boolean getPresence() {
		return presence;
	}
	
	/**
     * Récupérer la luminosité de la pièce
     * @return Luminostité de la pièce
     */
	public boolean getLumiere() {
		return lumiere;
	}
	
	/**
     * Récupérer la température de la pièce
     * @return Température de la pièce
     */
	public float getTemperaturePiece() {
		return temperaturePiece;
	}
	
	/**
     * Récupérer la température voulu de la pièce
     * @return Température voulu de la pièce
     */
	public float getTemperatureVoulu() {
		return temperatureVoulu;
	}
	
	/**
     * Récupérer les coordonnées Haut/Gauche de la pièce
     * @return Coordonnées Haut/Gauche de la pièce
     */
	public int getCoordHG() {
	    return coordHG;
	}
	
	/**
     * Récupérer les coordonnées Bas/Droit de la pièce
     * @return Coordonnées Bas/Droit de la pièce
     */
	public int getCoordBD() {
	    return coordBD;
	}
	
	/**
     * Changer le nom de la pièce
     * @param nomPiece Nouveau nom de la pièce
     */
	public void setNomPiece(String nomPiece) {
	    this.nomPiece = nomPiece;
	}
	
	/**
     * Changer l'identifiant de la pièce
     * @param id Nouvelle identifiant de la pièce
     */
	public void setId(int id) {
	    this.id = id;
	}
	
	/**
     * Changer la présence de la pièce
     * @param presence Nouvelle présence de la pièce
     */
	public void setPresence(boolean presence) {
		this.presence = presence;
	}
	
	public void setLumiere(boolean lumiere) {
		this.lumiere = lumiere;
	}
	
	/**
     * Changer la température dans la pièce
     * @param temperaturePiece Nouvelle température dans la pièce
     */
	public void setTemperaturePiece(float temperaturePiece) {
		this.temperaturePiece = temperaturePiece;
	}
	
	/**
     * Changer la température voulu dans la pièce
     * @param temperatureVoulu Nouvelle température voulu dans la pièce
     */
	public void setTemperatureVoulu(float temperatureVoulu) {
		this.temperatureVoulu = temperatureVoulu;
	}
	
	/**
     * Changer les coordonnées Haut/Gauche de la pièce
     * @param coordHG Coordonnées haut/Gauche la pièce
     */
	public void setCoordHG(int coordHG) {
	    this.coordHG = coordHG;
	}
	
	/**
     * Changer les coordonnées Bas/Droit de la pièce
     * @param coordBD Coordonnées Bas/Droit la pièce
     */
	public void setCoordBD(int coordBD) {
	    this.coordBD = coordBD;
	}

	/**
     * Récupérer la liste des objets de la pièce
     * @return La liste des objets de la pièce
     */
	public HashMap<String, Objet> getListObjet() {
		return listObjet;
	}
	
	/**
     * Récupérer la liste des capteurs de la pièce
     * @return La liste des capteurs de la pièce
     */
	public HashMap<String, Capteur> getListCapteur() {
		return listCapteur;
	}
	
	/**
     * String de Piece
     * @return Chaîne
     */
	public String toString() {
		return "Piece [id=" + id + ", listObjet=" + listObjet + ", lumiere="
				+ lumiere + ", nomPiece=" + nomPiece + ", presence=" + presence
				+ ", temperaturePiece=" + temperaturePiece
				+ ", temperatureVoulu=" + temperatureVoulu + "]";
	}
	
	/**
     * Chaîne XML correspondant au la pièce
     * @return Chaîne xml
     */
	public String xml() {
		return "\t<piece name=\""+nomPiece+"\" id=\""+id+"\" temperature=\""+temperaturePiece+"\" temperatureVoulu=\""+temperatureVoulu+"\" presence=\""+presence+"\" lumiere=\""+lumiere+"\" coordHG=\""+coordHG+"\" coordBD=\""+coordBD+"\">\n";
	}
}